package com.gjzhao.fammll.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description: 消息队列 初始化交换机、队列的配置类
 * @Author: gjzhao
 * @Date Created in 2022-02-19 3:35 下午
 */
@Configuration
public class RabbitMQConfig {

    private Logger logger = LoggerFactory.getLogger(getClass());


    ////声明交换机:emailExchange2 [订阅交换机]
    //@Bean
    //public FanoutExchange emailExchange2() {
    //    return new FanoutExchange("emailExchange2");
    //}

    //声明交换机:msgExchange2 [路由交换机]
    @Bean
    public DirectExchange msgExchange2() {
        logger.info("-----初始化交换机:msgExchange2[路由交换机]---");
        return new DirectExchange("msgExchange2");
    }


    //声明队列：msgQueue2
    @Bean
    public Queue msgQueue2() { //注意Queue需要导入amqp中的
        logger.info("-----初始化队列:msgQueue2---");
        return new Queue("msgQueue2");
    }

    //声明队列：emailQueue2
    @Bean
    public Queue emailQueue2() {
        logger.info("-----初始化队列:emailQueue2---");
        return new Queue("emailQueue2");
    }


    //交换机与队列进行绑定：每绑定一个队列都需要一个bean
    @Bean
    public Binding bindingQueueMsgQueue2(Queue msgQueue2, DirectExchange msgExchange2) { //方法名即为需要绑定的对象

        logger.info("-----将msgQueue2队列绑定到msgExchange2上，并指定key为：key1-----");

        //表示将队列 msgQueue2 绑定到 交换机 msgExchange2 上，并指定key
        return BindingBuilder.bind(msgQueue2).to(msgExchange2).with("k1");
    }

    //交换机与队列进行绑定：每绑定一个队列都需要一个bean
    @Bean
    public Binding bindingQueueEmailQueue2(Queue emailQueue2, DirectExchange msgExchange2) { //方法名即为需要绑定的对象

        logger.info("-----将emailQueue2队列绑定到msgExchange2上，并指定key为：key2------");

        //表示将队列 msgQueue2 绑定到 交换机 msgExchange2 上，并指定key
        return BindingBuilder.bind(emailQueue2).to(msgExchange2).with("k2");
    }


    //用于保存订单
    @Bean
    public Queue orderQueue() {
        logger.info("-----初始化队列:orderQueue---");
        return new Queue("orderQueue");
    }

}
